1
具狀態的流程與尾調用優化
AI019Lesson 7
00:00

在 Elixir 中,流程預設是短暫的;一旦函數執行完畢,流程就會終止。要建立一個 持續且具狀態的流程,我們會使用遞迴來讓流程在迴圈中持續運作。

1. 尾調用優化(TCO)

如果函數的最後一個絕對動作是呼叫自身,Erlang 虛擬機(BEAM)就會執行 尾調用優化。它不會將新的框架加入堆疊,而是直接 跳回函數起始處 並帶入新的參數。

def factorial(n, acc), do: _fact(n-1, acc*n) # TCO
def factorial(n), do: n * factorial(n-1) # 非 TCO
greet() 的邏輯greet() 呼叫TCO:重用堆疊框架

2. 持續狀態

狀態是透過將更新後的值作為參數傳遞給遞迴呼叫來維持。由於 TCO,這些參數會取代堆疊上的原始參數,而無需額外消耗記憶體,因此允許迴圈無限執行。

main.py
TERMINALbash — 80x24
> Ready. Click "Run" to execute.
>